本地与离线环境:Claude Code、Codex 接入实战
前 18 章的所有实战都建立在一个默认前提上:一张能出墙的网和一张云端 API 账单。这节换前提——网络受限、只能直连国内端点、甚至大部分时间离线时,AI 编码工具怎么接。先划清官方支持的边界,再动手:Claude Code 的端点定制、国内模型直连矩阵、Codex CLI 的配置变化,以及 DeepSeek 官方新出的 Harness。
先划清边界:官方支持什么,不支持什么
动手改配置前必须知道红线在哪,否则排错方向就是错的。Claude Code 的网关协议只支持三种:Anthropic Messages(/v1/messages)、Bedrock InvokeModel、Vertex rawPredict,官方明确不支持 OpenAI-compatible 端点直连。更关键的一条官方原话:"doesn't support routing Claude Code to non-Claude models through any gateway"——不支持经任何网关把 Claude Code 路由到非 Claude 模型,第三方网关 Anthropic 不背书、不审计。
由此得出本节最重要的现实判断:「完全离线跑 Claude Code」官方不存在。它没有本地模型模式,必须连一个能讲 Anthropic Messages 协议的端点。出路只有三条:内网网关做协议翻译(社区支持、官方不背书)、换天生开放协议的工具(Codex 的 --oss、dsh 的三协议任选)、买私有化成品(下一节)。第 2-3 章讲过 Claude Code 的基础使用与 CLAUDE.md/Skills/MCP 配置,这节只动"端点与凭据"这一层。
Claude Code 端点定制:环境变量实操
Claude Code 的接入面全部通过环境变量控制,逐个过一遍容易踩坑的:
端点与凭据。ANTHROPIC_BASE_URL 覆盖 API 端点,把请求路由到代理或网关。注意隐性行为:指向非第一方 host 时 MCP tool search 默认被禁用(ENABLE_TOOL_SEARCH=true 可恢复);v2.1.196 起 Remote Control 在端点不是 api.anthropic.com 时也禁用。凭据有两个变量,区别在 HTTP 头:ANTHROPIC_AUTH_TOKEN 走 Authorization: Bearer 头,ANTHROPIC_API_KEY 走 X-Api-Key 头——网关接入官方建议默认用前者。
模型覆盖。ANTHROPIC_MODEL 覆盖任意 settings 里的 model 设置;ANTHROPIC_DEFAULT_OPUS_MODEL / ANTHROPIC_DEFAULT_SONNET_MODEL / ANTHROPIC_DEFAULT_HAIKU_MODEL 负责解析别名。特别提醒:旧教程常见的 ANTHROPIC_SMALL_FAST_MODEL 已标 DEPRECATED,被 ANTHROPIC_DEFAULT_HAIKU_MODEL 取代——照抄 2025 年的教程会得到一个静默失效的配置。
超时。API_TIMEOUT_MS 默认 600000(10 分钟),走代理或慢网时建议调大,否则长任务的流式请求容易被中间层掐断。
代理与证书。企业网里最常见的一组:
export HTTPS_PROXY=http://proxy.corp.local:8080 # 标准代理变量,另有 HTTP_PROXY / NO_PROXY
export NODE_EXTRA_CA_CERTS=/etc/corp/ca-cert.pem # 自定义企业 CA
export CLAUDE_CODE_CLIENT_CERT=/etc/corp/cli.pem # mTLS 双向认证
export CLAUDE_CODE_CLIENT_KEY=/etc/corp/cli.key
bash
证书信任默认走 Mozilla CA 列表加操作系统证书库,但 npm 安装方式需要 Node ≥ 22.15 才会读 OS 证书库——"公司 CA 明明装了却连不上"常源于此。
流量开关。CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 一并关闭自更新、遥测、错误上报。它有个反直觉的坑:设成 0 或 false 也仍然是禁用,必须 unset 变量才能恢复——只关心自更新的话用更精确的 DISABLE_AUTOUPDATER。另外 CLAUDE_CODE_USE_BEDROCK=1 / CLAUDE_CODE_USE_VERTEX=1 两条云厂商路线仍受支持,各有对应 BASE_URL 变量可再指向内网网关,并可跳过云厂商鉴权。
直连国内模型:Anthropic 兼容端点矩阵
2026 年国产模型厂商基本都提供了 Anthropic 兼容端点,Claude Code 可以直连——先说清楚定位:直连国内云 API 不是离线,只是"无墙、可用人民币结算、显著降本";真离线要靠下一节的自建。矩阵如下(价格为 2026-10 核实值):
| 厂商 | Anthropic 端点 | 计费与价格要点 | 备注 |
|---|---|---|---|
| GLM(智谱) | https://open.bigmodel.cn/api/anthropic | Coding Plan:Lite ¥118 / Pro ¥538 / Max ¥1078 连续包月(2026-11-07 核实,包年 7 折);按量 GLM-5.3 输入 ¥8/M、输出 ¥28/M、缓存命中 ¥2/M(官方定价页复核一致) | Coding Plan 为积分制、仅限编程工具内用(2026-11 官方调价后具体积分额度以官网为准);模型 GLM-5.3 / GLM-5.3-Flash,上下文 1M |
| DeepSeek | https://api.deepseek.com/anthropic | 按量(2026-11-07 核实,官方已改人民币计价,空闲时段半价):flash 缓存命中 ¥0.02-0.04/M、未命中 ¥1-2/M、输出 ¥4-8/M | 模型 deepseek-flash(V4.1-Flash)与 deepseek-v4-pro,上下文 1M、最大输出 384K;同时支持 OpenAI 与 Responses API |
| Qwen(阿里百炼) | Token Plan / Coding Plan / 按量 三个端点 | 订阅:Standard ¥139/月、Pro ¥499/月(个人 Lite ¥39/月,数字来自官网搜索摘要,课程使用前建议复核) | 按量端点形如 https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/apps/anthropic;文档含 [1m] 后缀与 CLAUDE_CODE_MAX_CONTEXT_TOKENS 用法 |
| Kimi(月之暗面) | https://api.moonshot.cn/anthropic | 纯按量:kimi-k3(1M 上下文)缓存命中 ¥2/M、未命中 ¥20/M、输出 ¥100/M(2026-11-07 复核一致);K2 系列(含 kimi-k2.7-code)2026-10-31 起停止新用户、计划 12 月底全线下线,新接入选 K3 系 | 官方提供 Claude Code / Codex 接入指南与 Kimi Code CLI |
| MiniMax | https://api.minimaxi.com/anthropic | Coding Plan 订阅页存在,具体档位未能核实 | 端点有官方教程且多源一致 |
两个完整配置示例。第一个是 DeepSeek 官方文档的 Claude Code 直连原文,也是理解变量协作的好样本:
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=<你的 DeepSeek API Key>
# Opus/Sonnet 别名映射到 deepseek-flash[1m],Haiku 映射到 deepseek-flash
export ANTHROPIC_MODEL=deepseek-flash[1m]
export CLAUDE_CODE_SUBAGENT_MODEL=deepseek-flash
export CLAUDE_CODE_EFFORT_LEVEL=max
export CLAUDE_CODE_AUTO_COMPACT_WINDOW=786432
bash
DeepSeek 端还会自动做别名映射:请求里的 claude-opus* 落到 deepseek-v4-pro,claude-sonnet* / claude-haiku* 落到 deepseek-flash——所以不设模型变量也能跑,设了则全程可控。第二个是 GLM 按量直连的最小配置:
export ANTHROPIC_BASE_URL=https://open.bigmodel.cn/api/anthropic
export ANTHROPIC_AUTH_TOKEN=<你的智谱 API Key>
export ANTHROPIC_MODEL=glm-5.3 # 轻量任务可换 glm-5.3-flash 降本
bash
Kimi 的接入同理换端点与模型名即可(kimi-k3 / kimi-k2.7-code)。
Codex CLI:config.toml 与 wire_api 的重要变化
Codex 走的是另一条配置路:~/.codex/config.toml 里的 model_providers 字段。先看结构:
# ~/.codex/config.toml(用户级)
model = "deepseek-flash"
model_provider = "deepseek" # 顶层选定 provider id
[model_providers.deepseek]
name = "DeepSeek"
base_url = "https://api.deepseek.com/"
env_key = "DEEPSEEK_API_KEY"
wire_api = "responses"
toml
model_providers.<id> 可配 name、base_url、env_key、wire_api、http_headers/env_http_headers、query_params,以及三个容易忽略的重试参数:request_max_retries(默认 4)、stream_max_retries(默认 5)、stream_idle_timeout_ms(默认 300000)——内网网关抖动时先调这三个。
本节最有价值的变化点:wire_api 当前唯一合法值是 "responses"(且为默认)。2025 年大量教程用 wire_api = "chat" 接 Ollama 的写法,已从官方配置参考中移除、直接失效——自定义 provider 必须实现 OpenAI Responses API。配套的好消息是 Ollama 补上了 /v1/responses 兼容层(v0.13.3 引入为二手来源;官方 v0.32.11 release note 确认该兼容层已支持 web search),本地模型这条线重新打通:
[model_providers.local_ollama]
base_url = "http://localhost:11434/v1"
wire_api = "responses"
toml
内置 provider id 有 openai、ollama、lmstudio、amazon-bedrock 四个;--oss 配合 oss_provider 直接用本地模型。两个坑:provider 必须写用户级 ~/.codex/config.toml——项目级 .codex/config.toml 里的 model_provider、model_providers 等认证类键会被忽略;默认流程要 ChatGPT 登录或 API key(forced_login_method = "api" 可强制后者)。纯本地能跑,但插件生态按联网环境设计、离线下能用多少缺乏验证(推断)。接 DeepSeek 除手动配置外,官方还提供一键脚本:写入 provider 配置、生成 ~/.codex/models.json 模型目录、自动备份回滚。
落地全景:三块生态,成本优先
动手搭建内网环境前先立一张全景图:企业里把 AI 编码工具用起来,需要三块生态协同——模型生态(中转网关与推理 API 是两回事,不混为一谈:网关做协议转换与渠道分发,推理层 vLLM/Ollama 负责出 token;Claude Code、Codex 这类 harness 必须对接好顶层模型才能完整发挥能力)、工具生态(内网搜索要结合记忆与向量数据库,对应第 17-04 节的 RAG 线)、分发生态(verdaccio 这类制品仓库——企业内部本来就有 Docker 镜像、npm、Python 制品的中央仓库,dsh 的插件安装就对接在这里)。主流自建组合:网关层 LiteLLM / new-api(大量中转站也在用),外围还有 uni-api、sub2api 这类把国外云服务或订阅账号转换成 API 的项目;推理层是 Ollama 与高性能的 vLLM,后者对国产设备的支持暂时不如前者友好(国产方案下一节展开)。
而这三块之上最重的考量不是功能清单,是成本——推理的成本,以及后续长期使用的成本。下一节专门演算。
DeepSeek Harness(dsh):离线/内网环境的主力 harness
直连矩阵只解决无墙降本;真离线时推理回到内网(下一节自建三件套),缺的是其上工具层。DeepSeek 官方开源的 dsh(DeepSeek Harness,deepseek-ai/deepseek-harness) 补的正是这层:内网 OpenAI 兼容端点+dsh=不出网的 agent harness,主讲场景是离线/内网配离线部署模型。2026-08-13 创建,MIT 协议,截至 2026-11-07 核实 275,072 stars。口号 "Everything is a Plugin",基于 Cordis 框架(arXiv:2608.25512),developer preview,官方明示有破坏性变更。
npm i -g @deepseek-ai/dsh # 0.2.2-rc.1(2026-11-04)
dsh # CLI:profile/插件/配置
dsh web # Web UI(见下)
bash
为什么内网主力选 dsh,而不是接着用 Claude Code/Codex:它是开源社区平台(MIT),对内网友好——OpenAI 兼容端点通吃云端 API 与本地推理(Ollama、vLLM 都能接);自带 Web UI,行政、文案等非编程岗也能直接开对话,比 Open WebUI、NextChat 这类通用聊天前端轻量;插件体量大、社区开放,更新跟得上前沿 harness 技术。此外课程后面还会专门讲 pi——Mario Zechner 的极简编码 agent(OpenClaw 系),只有 read/bash/edit/write 四个基础工具,靠 TypeScript 扩展、Skills 与包机制扩展能力,是"重活给完整 harness、轻量本地任务走更省路径"的那个轻量备选(展开见 19-03 与后续章节)。
自定义 provider 为接内网自建端点而设计(官方原话:面向中转站、公司网关、自建服务器;2026-10-05 核实)。设置→模型→添加模型提供商→「自定义模型 API」:Provider ID(小写永久不可改)+ 基础 URL + 协议三选一(OpenAI Chat Completions / OpenAI Responses / Anthropic Messages,cordis.patch.yml 存为 openai-completions / openai-responses / anthropic-messages,一个 provider 只用一种协议)+ 凭据 + 至少一个模型;「获取可用模型」走 GET /models 探测(OpenAI 兼容列表格式),探测不到手动加模型 ID。直改 $DSH_HOME/profiles/<profile>/cordis.patch.yml 等价(「打开配置文件」直达),改完下次请求生效无需重启,凭据存 $DSH_HOME/.credentials.yaml。内网写法(官方示例 gateway.example,写法相同):
- id: llm-pi-ai
config:
providers:
my-gateway: # 内网 vLLM/Ollama 的 OpenAI 兼容端点
api: openai-completions
baseURL: http://127.0.0.1:11434/v1
compat:
supportsDeveloperRole: false
maxTokensField: max_tokens
yaml
compat 排错(内网网关高频):密钥地址都通却拒绝请求,多半是请求形状问题,先设 compat.supportsDeveloperRole: false(系统提示词不走 developer 角色)与 compat.maxTokensField: max_tokens;推理模型 off 关不掉思考 → compat.thinkingFormat: deepseek。
联网场景下多模型/多 provider 管理是次级价值(GUI 凭据/provider 管理、profile、插件化)。风险提示:把 ChatGPT/Claude 订阅账号当 provider 的社区插件可能违反 ToS,企业别碰。
插件分发:官方没有"插件市场"页面(官方 publish 文档,2026-10-05 核实)。插件以 npm 包形态分发:「组合包 bundle」(package.json 声明 dsh.bundle+cordis.patch.yml 配置层)经 dsh plugin --profile <name> add <包> 装进 profile($DSH_HOME/profiles/<name>,声明 dsh.profile 与有序 bundles);dsh plugin 转发 pnpm 子命令,remove 连依赖带配置层移除。三形态:npm 发布(pnpm publish 预构建 lib/ 最省事)/ GitHub 直装 dsh plugin add github:you/repo(拉源码不跑 build:作者须提供自包含 prepare 脚本,用户须在 profile 的 pnpm-workspace.yaml allowBuilds 授权=允许装时执行代码)/ tarball ./xxx.tgz。社区聚合:awesome-dsh-plugin(23.4k,2026-11-07 核实)与 topic dsh-plugin。层叠:base → bundle 按安装序 → profile patch → home 级 → --patch overlay,后层整行覆盖不深度合并。
Web UI:一条命令的本地控制台(2026-10-05 实测)。npx @deepseek-ai/dsh web 默认 127.0.0.1:3080,--port 换口。token-URL 认证首跑必撞:终端打印带 token 的 URL,裸开域名 401,须开打印地址。界面四件:会话/工作区树(⌘N、/指令、@引用);插件面板(官方 7 插件:智能体团队/自动授权审查/语音输入 SenseVoice/终端/Agent 循环/子智能体/网页搜索;添加插件收 npm 包名/GitHub/本地路径);设置→模型表单(字段即前述 Provider ID+URL+协议下拉,官方文案"连接中转站、自部署服务或兼容 OpenAI/Anthropic 协议的接口");插件市场是官方插件(dshmarket,仍走 npm 分发),安装源可切中国大陆镜像源,暂无自动更新,升级=卸载重装。
插件市场实操:市场本体没装时用命令行补上——dsh plugin --profile web add dshmarket(npm 包),装完重启 dsh 生效。市场里可按 star 数筛选、按分类浏览(工作流 / UI 增强 / 搜索增强 / 版本控制 / 记忆等);dshmarket.com 已收录 4400+ 社区插件(2026-10 核实),常用的如记忆检索插件 memory-search(配合编码会话存取上下文)。没装市场时找插件的通用姿势是 awesome 检索:"awesome + 方案名"能搜出各方案的社区聚合清单(dsh 对应 awesome-dsh-plugin,23.4k)——选定插件后下载、推到 verdaccio,内网即可安装使用(私服对接细节见 19-04 第一章与第 5.2 节的 registry 继承规则)。
社区网关:claude-code-router
留在 Claude Code 本体上做协议翻译的代表是 claude-code-router(musistudio 出品):38,027 stars、MIT、2026-10-10 仍在推送(2026-11-07 核实),npm 包 @musistudio/claude-code-router 提供 ccr 命令和 Web UI。原理:本地起网关接收 Anthropic Messages 请求,翻译后转发到 OpenAI / Google / DeepSeek / 本地模型,支持自定义 JS 路由函数与插件转换器。再强调一次定位:它是社区协议翻译层,不是官方能力——前述官方"不背书网关路由到非 Claude 模型"的立场对它同样适用,升级导致配置失效要自己兜底。
离线程度与方案选型
把本节的选项按"离线程度"排开:
| 离线程度 | 方案 | 能否离线 | 关键代价 |
|---|---|---|---|
| 无墙直连 | 国内云 API 直连(GLM/DeepSeek/Qwen/Kimi/MiniMax) | 否,仍需外网到厂商端点 | 厂商侧数据合规需评估 |
| 协议翻译 | claude-code-router / 内网网关 | 半(推理仍在外) | 社区方案,官方不背书,升级风险自担 |
| 开放 harness | Codex --oss / ollama provider;dsh 三协议 | 可(配本地推理) | Codex 只认 Responses API;dsh 尚在 preview |
| 真离线 | 自建三件套(下一节) | 是 | 首次部署与持续更新的工程成本 |
一句话收束:本节所有"直连"方案解决的是无墙与降本,把推理层搬进内网才是真离线。
小结
- 官方边界:Claude Code 只认 Anthropic Messages / Bedrock / Vertex 三种协议,不支持网关路由到非 Claude 模型——「完全离线跑 Claude Code」官方不存在
- 端点定制:
ANTHROPIC_BASE_URL+ANTHROPIC_AUTH_TOKEN(Bearer 头,网关首选);ANTHROPIC_SMALL_FAST_MODEL已废弃;CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC设 0 仍是禁用、必须 unset - 直连矩阵:五家国产厂商均有 Anthropic 兼容端点;DeepSeek 官方六行配置可整段照抄;MiniMax 档位未核实
- Codex 变化:
wire_api只剩"responses"一个合法值,旧教程wire_api="chat"已失效;provider 必须写用户级 config.toml - dsh:离线/内网主力 harness——三协议接内网端点+compat 排错+bundle 分发无官方市场(dshmarket 市场可
dsh plugin --profile web add dshmarket补装,awesome 检索找插件);preview 需容忍破坏性变更 - claude-code-router:38.0k star(2026-11-07 核实)的社区协议翻译层,能用但官方不背书
↑